// 给定一个整数类型的数组 nums，请编写一个能够返回数组 “中心索引” 的方法。
// 我们是这样定义数组 中心索引 的：数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。
// 如果数组不存在中心索引，那么我们应该返回 -1。如果数组有多个中心索引，那么我们应该返回最靠近左边的那一个。

const pivotIndex = function (nums: number[]): number {
    if (nums.length < 3) return -1;// 边缘检测
    const total: number = nums.reduce((a, b) => a + b);
    let frontSum = 0;// 计算前缀和
    for (let i = 0; i < nums.length; i++) {
        // 后缀和等于前缀和时
        if (total - nums[i] - frontSum === frontSum) {
            return i;
        }
        frontSum += nums[i];
    }
    return -1;
};


// 这道题是一道数学性质比较重的题目
// 首先应该比较容易思考的是这明显是一道与前缀和相关的题目
// 但同时它又和后缀和相关，这里有一个经典的处理
// 在已知前缀和的情况下我们不需要重复计算后缀和
// 我们实质上可以先计算出总和，然后用总和减去前缀和再减去当前元素即可计算出当前元素的后缀和
// 这里的关键是总和需要先计算出来，之后再注意一下边缘情况即可。
